home *** CD-ROM | disk | FTP | other *** search
/ 130 MIDI Tool Box / 130 MIDI Tool Box.iso / mpu401c / mpu.h < prev    next >
C/C++ Source or Header  |  1986-11-02  |  6KB  |  133 lines

  1. /* Copyright (C) 1986 by M. J. Shannon, Jr.
  2. ** Permission to distribute for non-commercial uses granted as long as this
  3. ** notice is retained.  Violators will be prosecuted.
  4. */
  5.  
  6. /* Port addresses */
  7. #define    MPUP_STAT    0x331    /* RO: status */
  8. #define    MPUP_COMD    0x331    /* WO: command */
  9. #define    MPUP_DATA    0x330    /* RW: data */
  10.  
  11. /* Bits in status port */
  12. #define    MPUPS_DSR    0x80    /* mpu: ready to send */
  13. #define    MPUPS_DRR    0x40    /* mpu: ready to receive */
  14.  
  15. /* MPU commands */
  16. #define    CMD_UART    0x3F    /* become a dumb uart */
  17. #define    CMD_INTCLOCK    0x80    /* MPU is master clock */
  18. #define    CMD_EXTCLOCK    0x82    /* master clock is not MPU */
  19. #define    CMD_FSKINT    0x92    /* set FSK sync res. to internal sync res. */
  20. #define    CMD_FSKMIDI    0x93    /* set FSK sync res. to MIDI sync res. */
  21. #define    CMD_RESET    0xFF    /* reset to default state */
  22.  
  23. /* Initialization switches */
  24. #define    SWD_ALLOFF    0x30    /* disable automatic "ALL NOTES OFF" */
  25. #define    SWD_REALTIME    0x32    /* disable automatic real time msgs */
  26. #define    SWD_THRU    0x33    /* disable "thru" function */
  27. #define    SWE_TIME    0x34    /* add timing bytes in "data in stop" mode */
  28. #define    SWE_MODE    0x35    /* pass mode messages to host */
  29. #define    SWE_TEXCL    0x37    /* pass exclusive msgs from in to out */
  30. #define    SWE_COMMON    0x38    /* pass common messages to host */
  31. #define    SWE_REALTIME    0x39    /* pass real time messages to host */
  32. #define    SWE_FSKSYNC    0x81    /* enable FSK input/output & sync to it */
  33. #define    SWE_METRO    0x83    /* metronome on - no accents */
  34. #define    SWD_METRO    0x84    /* metronome off */
  35. #define SWE_AMETRO    0x85    /* metronome on - w/accents */
  36. #define    SWD_BENDER    0x86    /* disable continuous controller to host */
  37. #define    SWE_BENDER    0x87    /* enable continuous controller msgs */
  38. #define    SWD_VOXTHRU    0x88    /* disable voice "thru" function */
  39. #define    SWE_VOXTHRU    0x89    /* enable voice "thru" function */
  40. #define    SWD_DATAINSTOP    0x8A    /* disable "data in stop" mode */
  41. #define    SWE_DATAINSTOP    0x8B    /* enable "data in stop" mode */
  42. #define    SWD_MEASEND    0x8C    /* disable "measure end" to host */
  43. #define    SWE_MEASEND    0x8D    /* enable "measure end" to host */
  44. #define    SWD_CONDUCT    0x8E    /* disable conductor function */
  45. #define    SWE_CONDUCT    0x8F    /* enable conductor function */
  46. #define    SWD_RTAFFECT    0x90    /* disable real time affection */
  47. #define    SWE_RTAFFECT    0x91    /* enable real time affection */
  48. #define    SWD_CLKHOST    0x94    /* disable "clock to host" msgs */
  49. #define    SWE_CLKHOST    0x95    /* enable "clock to host" msgs */
  50. #define    SWD_HEXCL    0x96    /* don't pass exclusives to host */
  51. #define    SWE_HEXCL    0x97    /* pass exclusives to host */
  52. #define    SWD_CRTA    0x98    /* channel reference table A off */
  53. #define    SWE_CRTA    0x99    /* channel reference table A on */
  54. #define    SWD_CRTB    0x9A    /* channel reference table B off */
  55. #define    SWE_CRTB    0x9B    /* channel reference table B on */
  56. #define    SWD_CRTC    0x9C    /* channel reference table C off */
  57. #define    SWE_CRTC    0x9D    /* channel reference table C on */
  58. #define    SWD_CRTD    0x9E    /* channel reference table D off */
  59. #define    SWE_CRTD    0x9F    /* channel reference table D on */
  60.  
  61. /* Information retrieving commands */
  62. #define    GET_PC1        0xA0    /* get play counter for track 1 */
  63. #define    GET_PC2        0xA1    /* get play counter for track 2 */
  64. #define    GET_PC3        0xA2    /* get play counter for track 3 */
  65. #define    GET_PC4        0xA3    /* get play counter for track 4 */
  66. #define    GET_PC5        0xA4    /* get play counter for track 5 */
  67. #define    GET_PC6        0xA5    /* get play counter for track 6 */
  68. #define    GET_PC7        0xA6    /* get play counter for track 7 */
  69. #define    GET_PC8        0xA7    /* get play counter for track 8 */
  70. #define    GET_RC        0xAB    /* get record counter (& clear it) */
  71. #define    GET_TEMPO    0xAF    /* get the tempo */
  72. #define    GET_VERSION    0xAC    /* get firmware version */
  73. #define    GET_REVISION    0xAD    /* get firmware revision */
  74.  
  75. /* Clear functions */
  76. #define    CLR_RELTEMPO    0xB1    /* sets relative tempo to 1/1 */
  77. #define    CLR_PC        0xB8    /* clears all play counters */
  78. #define    CLR_PM        0xB9    /* clears all channel reference tables */
  79. #define    CLR_RC        0xBA    /* clear the record counter */
  80.  
  81. /* Set functions (no operands) */
  82. #define    SET_TB48    0xC2    /* set timebase to 48 clocks/beat */
  83. #define    SET_TB72    0xC3    /* set timebase to 72 clocks/beat */
  84. #define    SET_TB96    0xC4    /* set timebase to 96 clocks/beat */
  85. #define    SET_TB120    0xC5    /* set timebase to 120 clocks/beat */
  86. #define    SET_TB144    0xC6    /* set timebase to 144 clocks/beat */
  87. #define    SET_TB168    0xC7    /* set timebase to 168 clocks/beat */
  88. #define    SET_TB192    0xC8    /* set timebase to 192 clocks/beat */
  89.  
  90. /* Set functions (operand follows) */
  91. #define    SET_TEMPO    0xE0    /* set tempo */
  92. #define    SET_RTEMPO    0xE1    /* set relative tempo */
  93. #define    SET_TGRAD    0xE2    /* set tempo graduation */
  94. #define    SET_CMBEAT    0xE4    /* set # MIDI clocks / metronome beat */
  95. #define    SET_MBMEAS    0xE6    /* set # metronome beats / measure */
  96. #define    SET_ICCLOCK    0xE7    /* set # internal clocks (x4) / clock to host */
  97. #define    SET_ACTIVE    0xEC    /* set active tracks bitmap */
  98. #define    SET_PLAYCTRS    0xED    /* set play counter bitmap */
  99. #define    SET_LACCCH    0xEE    /* set lo acceptable tracks bitmap */
  100. #define    SET_HACCCH    0xEF    /* set hi acceptable tracks bitmap */
  101.  
  102. /* Request functions */
  103. #define    REQ_SCH(n)    (0xD0 | ((n) & 0x07))
  104. #define    REQ_SCH0    0xD0    /* want to send data on track 0 */
  105. #define    REQ_SCH1    0xD1    /* want to send data on track 1 */
  106. #define    REQ_SCH2    0xD2    /* want to send data on track 2 */
  107. #define    REQ_SCH3    0xD3    /* want to send data on track 3 */
  108. #define    REQ_SCH4    0xD4    /* want to send data on track 4 */
  109. #define    REQ_SCH5    0xD5    /* want to send data on track 5 */
  110. #define    REQ_SCH6    0xD6    /* want to send data on track 6 */
  111. #define    REQ_SCH7    0xD7    /* want to send data on track 7 */
  112. #define    REQ_SSYS    0xDF    /* want to send system message */
  113.  
  114. #define    CMD_ACK        0xFE    /* MPU's acknowledement of a command */
  115.  
  116. /* Interesting MIDI bytes */
  117. #define    MIDI_EOX    0xF7    /* End Of eXclusive message */
  118.  
  119. /* Declarations for routines in mpu.c: */
  120. extern int wait_drr();
  121. extern int wait_dsr();
  122. extern int mpu_get(unsigned char);
  123. extern void mpu_put(unsigned char);
  124. extern char *mpu_id();
  125. extern void mpu_sexcl(unsigned char *);
  126. extern int mpu_read(unsigned char *);
  127. extern int mpu_dget();
  128. extern void dxswremt(unsigned char, unsigned char);
  129. extern void dxpachng(unsigned char, unsigned char);
  130.  
  131. /* Definitions for various macros */
  132. #define    mpu_reset()    mpu_put(CMD_RESET)
  133.